package lk.service.blogspringboot.controller;

import lk.service.blogspringboot.domain.UserInfo;
import lk.service.blogspringboot.service.UserInfoService;
import lk.service.blogspringboot.util.JWTUtil;
import lk.service.blogspringboot.util.R;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Date;

/**
 * 登陆验证控制器
 *
 * @author LK
 * @since 2024-07-08 14:58:18
 */
@RestController
@RequestMapping("login")
public class LoginController {
    
    @Resource
    UserInfoService userInfoService;
    

    /**
     * 登录功能
     *
     * @param userInfo 筛选条件
     * @return ok
     */
    @PostMapping
    public R login(@RequestBody UserInfo userInfo) {
        String loginName = userInfo.getUsername();
        String loginPassword = userInfo.getPassword();
        // 查询用户是否存在
        R r = userInfoService.queryByUserName(loginName);
        UserInfo userData = (UserInfo)r.getData();
        //不存在则返回 “不存在此用户信息，请先注册”
        if(userData==null){
            r.setMessage("不存在此用户信息，请先注册");
        }
        //存在则查询用户名与密码是否匹配(即条件既满足用户名又满足密码)，返回可登录标志
        else {
            r = userInfoService.queryByUserNameAndPassword(loginName,loginPassword);
            UserInfo data =(UserInfo) r.getData();
            if(data==null){
                r.setMessage("密码错误");
            }else {
                String username = data.getUsername();
                // 验证通过、生成token
                String token = JWTUtil.generateToken(username);
                r.setData(token);
                r.setMessage("登陆成功");
            }
        }
        return r;
    }

    /**
     * 用户注册控制器方法
     * 负责处理用户注册请求，检查用户信息的合法性，并尝试注册新用户
     *
     * @param userInfo 包含用户信息的请求体，包括用户名、电话和邮箱等
     * @return 返回一个R对象，包含注册结果和可能的信息
     */
    @PostMapping("/register")
    public R register(@RequestBody UserInfo userInfo) {
        String loginName = userInfo.getUsername();
        String phone = userInfo.getPhone();
        String email = userInfo.getEmail();
        // 查询用户名是否存在
        R r = userInfoService.queryByUserName(loginName);
        UserInfo userData = (UserInfo)r.getData();

        // 查询手机号是否存在/是否绑定
        R r_phone = userInfoService.queryByUserPhone(phone);
        UserInfo userData_phone = (UserInfo)r_phone.getData();

        //查询邮箱是否存在/是否绑定
        R r_email = userInfoService.queryByUserEmail(email);
        UserInfo userData_email = (UserInfo)r_email.getData();

        //用户名已存在，则返回
        if(userData!=null){
            r.setData("hasExist");
            r.setMessage("此用户名已经存在,请换一个!");
        }
        //手机号已存在，则返回
        else if(userData_phone!=null){
            r.setData("hasExistPhone");
            r.setMessage("手机号已经绑定其他用户,请换一个!");
        }
        //邮箱已存在，则返回
        else if(userData_email!=null){
            r.setData("hasExistEmail");
            r.setMessage("邮箱已经绑定其他用户,请换一个!");
        }
        //都不存在，则继续注册
        else {
            R insert = userInfoService.insert(userInfo);
            if (insert!=null) {
                r.setData(true);
                r.setMessage("注册成功");
            }
        }
        return r;
    }
}
